package pimmodel;

import java.util.Date;

/**
 * 
 * Interface ITermin:<br>
 * Das Interface zur Klasse Termin.
 * 
 * @author Thomas Schoenfeld
 * @version (20120909_01)
 *
 */
public interface ITermin extends IPimDaten, Comparable<ITermin> {

	/**
	 * getDatum							gibt das Datum zurueck
	 * 
	 * @return							das Datum					
	 */
	public abstract Date getDatum();

	/**
	 * setDatum							aendert das Datum
	 * 
	 * @param	datum					das neue Datum
	 * 
	 * @throws	IllegalArgumentException falls kein gueltiges Objekt vom Typ Date uebergeben wurde
	 */
	public abstract void setDatum(Date datum);

	/**
	 * getBeschreibung					gibt die Beschreibung zurueck
	 * 
	 * @return							die Beschreibung			
	 */
	public abstract String getBeschreibung();

	/**
	 * setBeschreibung					aendert die Beschreibung
	 * 
	 * @param	beschreibung			die neue Beschreibung
	 * 
	 * @throws	IllegalArgumentException falls kein gueltiger String uebergeben wurde
	 */
	public abstract void setBeschreibung(String beschreibung);

	/**
	 * getStrasse						gibt die Strasse zurueck
	 * 
	 * @return							die Strasse			
	 */
	public abstract String getStrasse();

	/**
	 * setStrasse						aendert die Strasse
	 * 
	 * @param	strasse					die neue Strasse
	 * 
	 * @throws	IllegalArgumentException falls kein gueltiger String uebergeben wurde
	 */
	public abstract void setStrasse(String strasse);

	/**
	 * getHausnummer					gibt die Hausnummer zurueck
	 * 
	 * @return							die Hausnummer			
	 */
	public abstract String getHausnummer();

	/**
	 * setHausnummer					aendert die Hausnummer
	 * 
	 * @param	hausnummer				die neue Hausnummer
	 * 
	 * @throws	IllegalArgumentException falls keine gueltige Hausnummer uebergeben wurde
	 */
	public abstract void setHausnummer(String hausnummer);

	/**
	 * getOrt							gibt den Ort zurueck
	 * 
	 * @return							der Ort			
	 */
	public abstract String getOrt();

	/**
	 * setOrt							aendert den Ort
	 * 
	 * @param	ort						der neue Ort
	 * 
	 * @throws	IllegalArgumentException falls kein gueltiger String uebergeben wurde
	 */
	public abstract void setOrt(String ort);

	/**
	 * getAdresse						gibt die Adresse zurueck
	 * 
	 * @return							die Adresse
	 */
	public abstract IAdresse getAdresse();

	/**
	 * setAdresse						aendert die Adresse
	 * 
	 * @param	adresse					die neue Adresse
	 * 
	 * @throws	IllegalArgumentException falls keine gueltige Adresse uebergeben wurde
	 */
	public abstract void setAdresse(IAdresse adresse);

	/**
	 * getWiederholung					gibt an, ob Wiederholungstermin gesetzt
	 * 
	 * @return							true falls ja, false sonst 			
	 */
	public abstract boolean getWiederholung();

	/**
	 * setWiederholung					setzt Wiederholungstermin
	 * 
	 * @param	wiederholung			true falls setzen, false sonst		
	 * 
	 */
	public abstract void setWiederholung(boolean wiederholung);

	/**
	 * getWiederholungsintervall		gibt das Wiederholungsintervall zurueck
	 * 
	 * @return							das Wiederholungsintervall
	 */
	public abstract int getWiederholungsintervall();

	/**
	 * setWiederholungsintervall		aendert das Wiederholungsintervall
	 * 
	 * @param	wiederholungsintervall	das neue Wiederholungsintervall
	 * 
	 * @throws	IllegalArgumentException falls der uebergebene Wert negativ ist
	 */
	public abstract void setWiederholungsintervall(int wiederholungsintervall);

	/**
	 * getErinnerung					gibt an, ob Erinnerung gesetzt
	 * 
	 * @return							true falls ja, false sonst 			
	 */
	public abstract boolean getErinnerung();

	/**
	 * setErinnerung					setzt Erinnerung
	 * 
	 * @param	erinnerung				true falls setzen, false sonst		
	 * 
	 */
	public abstract void setErinnerung(boolean erinnerung);

	/**
	 * getErinnerungszeitpunkt			gibt den Erinnerungszeitpunkt zurueck
	 * 
	 * @return							den Erinnerungszeitpunkt
	 */
	public abstract int getErinnerungszeitpunkt();

	/**
	 * setErinnerungszeitpunkt			aendert den Erinnerungszeitpunkt
	 * 
	 * @param	erinnerungszeitpunkt	der neue Erinnerungszeitpunkt
	 * 
	 * @throws	IllegalArgumentException falls der uebergebene Wert negativ ist
	 */
	public abstract void setErinnerungszeitpunkt(int erinnerungszeitpunkt);

	/**
	 * toString					gibt Objektbeschreibung als String zurueck
	 * 
	 * @return					die Objektbeschreibung als String
	 */
	public abstract String toString();

	/**
	 * hashCode					liefert den Hashcode des Objekts als Integer zurueck
	 * 
	 * @return					den Hashcode des Objekts
	 * 
	 * @overrides				hashCode()
	 */
	public abstract int hashCode();

	/**
	 * equals					untersucht das Objekt mit einem uebergebenen Objekt auf Gleichheit
	 * 
	 * @param	obj				das mit diesem Objekt zu vergleichende Objekt
	 * 
	 * @return					true bei Gleichheit, sonst false
	 * 
	 * @overrides				equals()
	 */
	public abstract boolean equals(Object obj);

	/**
	 * compareTo		erlaubt einen lexikographischen Groessenvergleich mit einem anderen Termin
	 * 
	 * @param	kontakt	der zu vergleichende Termin
	 * 
	 * @return			-1, falls der aktuelle Termin lexikographisch kleiner,<br>
	 * 				 	 1, falls er groesser und<br>
	 * 				 	 0, gleich dem uebergebenen Termin ist
	 * 
	 * @throws			IllegalArgumentException falls das uebergebene Objekt nicht vom Typ ITermin ist.
	 */
	public abstract int compareTo(ITermin termin);

}